'use strict';
module.exports = {
	/**
	 * 用户登录(微信授权)
	 * @url client/user/pub/loginByWeixin 前端调用的url参数地址
	 * @description 支持APP、微信小程序、微信公众号
	 * data 请求参数 说明
	 * @param {String}  'content-type': 'application/json;charset=utf8'
	 * @param {String}  'vk-appId': '应用appid',
	 * @param {String}  'vk-platform': 'mp-weixin' h5 mp-weixin app-plus
	 * @param {String} code 微信登录返回的code
	 * @param {String} nickname 昵称
	 * @param {String} avatar 头像
	 * @param {Number} sex 性别 0保密 1男  2女
	 * @param {String} client 客户端
	 * @param {String} intro 简介
	 * @param {String} superior  上级邀请码
	 * @param {Number} is_partner 是否合伙人  0不是  1是
	 * @param {Number} is_author 是否创作者  0不是  1是
	 * @param {Number} vip 会员 
	 * @param {Number} integral 积分
	 * @param {String} balance  余额
	 * @param {String} balance_stay  待释放余额 
	 * @param {String} yesterday_earnings  昨日收益
	 * @param {String} last_month 上月收益
	 * @param {String} mobile 手机号
	 * res 返回参数说明
	 * @param {Number} code 错误码，0表示成功
	 * @param {String} msg 详细信息
	 * @param {String} token 登录成功之后返回的token信息
	 * @param {String} tokenExpired token过期时间
	 * @param {Object} userInfo 用户信息
	 * @param {Number} code  30201（设备特征校验未通过）30202（云端已不包含此token）30203（token已过期）30204（token校验未通过）
	 */
	main: async (event) => {
		let { data = {}, userInfo, util, filterResponse, originalParam } = event;
		let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
		let { uid } = data;
		let res = { code: 0, msg: "" };
		// 业务逻辑开始-----------------------------------------------------------
		let dbName = "uni-id-users";
		
		let custom = {
			nickname: data.nickName,
			avatar: data.avatarUrl,
			client: data.client,
			superior: data.superior,
			partner_grade: 1,
			intro: "",
			sex: 1,
			is_partner: 1,
			is_author: 0,
			vip: 0,
			integral: 0,
			balance: 0,
			balance_stay: 0,
			yesterday_earnings: 0,
			last_month: 0,
			mobile: ''
		};
		
		let dbConfig = await vk.callFunction({
			url: 'client/system_config/pub/getDetails',
			data: {
				type: "integral"
			}
		});
		
		custom["integral"] = dbConfig.register_integral || 0;
		
		if(!vk.pubfn.isNull(data.superior)) {
			let dbRes = await vk.baseDao.findByWhereJson({
				dbName,
				whereJson: {
					my_invite_code: data.superior
				}
			})
			if(!vk.pubfn.isNull(dbRes)) {
				custom["partner_grade"] = dbRes.partner_grade + 1;
				custom["superior_code"] = dbRes.my_invite_code;
				custom["superior_uid"] = dbRes._id;
			}
		}
		
		res = await vk.openapi.weixin.loginByWeixin({
			data,
			context: originalParam.context,
			custom,
			needKey: false, // 是否需要返回明文的sessionKey或accessToken（为了安全期间，建议设置false）
		});
		
		if (res.token) {
			// 日志服务
			const loginLogService = vk.require("service/user/util/login_log");
			await loginLogService.add({
				type: "login",
				login_type: "weixin",
				user_id: res.uid,
				context: originalParam.context
			}, util);
		}
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}
}
